home *** CD-ROM | disk | FTP | other *** search
- '**************************************************************************
- '* PC Logo for Windows Setup
- '* (C) 1993 by Harvard Associates, Inc.
- '**************************************************************************
-
- '$INCLUDE 'setupapi.inc'
- '$INCLUDE 'msdetect.inc'
- '$INCLUDE 'msregdb.inc'
-
- DECLARE FUNCTION ShowWindow LIB "USER" (Hwnd%, Mode%) AS INTEGER
-
- ' *************************** TRANSLATABLE ITEMS **************************
-
- CONST DEST = "C:\WINLOGO"
- CONST SMPL = "SAMPLES"
- CONST BANNER = "PC Logo for Windows Setup"
- CONST ABOUT = "⌐ 1994 by Harvard Associates, Inc."
- CONST FATAL = "Setup sources were corrupted, call your local distributor!"
- CONST OLDWIN = "You will need a few Windows 3.1 files to run PC Logo."
- CONST README = "Read Me"
-
- ' *************************** INSTALLATION SIZES **************************
-
- CONST SIZE_PROGRAMS = 500 ' LOGO.EXE and DLLs
- CONST SIZE_HELP = 800 ' LOGO.HLP
- CONST SIZE_SAMPLES = 35 ' Logo Samples
-
- ' ******************** NO TRANSLATION BEYOND THIS POINT *******************
-
- 'Dialog ID's
- CONST WELCOME = 100
- CONST ASKQUIT = 200
- CONST DESTPATH = 300
- CONST EXITFAILURE = 400
- CONST EXITQUIT = 600
- CONST EXITSUCCESS = 700
- CONST APPHELP = 900
- CONST WIN30WARNING = 1000
- CONST CHECK = 2500
- CONST TOOBIGDST = 6200
- CONST TOOBIGWIN = 6300
- CONST BADPATH = 6400
-
- 'Bitmap ID
- CONST LOGO = 1
-
- GLOBAL CUIDLL$
- GLOBAL SrcDir$ ' source directory
- GLOBAL DstDir$ ' Default destination directory.
- GLOBAL SampleDir$ ' Samples directory
-
- GLOBAL WINDISK$, DSTDISK$ ' source, destination disk
- GLOBAL WINFREE&, DSTFREE& ' free space on those disks
- GLOBAL WINREQ&, DSTREQ& ' required space
-
- GLOBAL PROGREQ& ' required program space
- GLOBAL HELPREQ& ' required help file space
- GLOBAL SAMPLEREQ& ' required sample file space
-
- GLOBAL PROGS$, HELP$, SAMPLES$ ' either ON or OFF
-
- DECLARE SUB Install
-
- DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
- DECLARE FUNCTION N2K( N& ) AS STRING
- DECLARE FUNCTION CheckDisks AS INTEGER
- DECLARE FUNCTION GroupSize( GROUP$ ) AS LONG
- DECLARE SUB AskForQuit
- DECLARE SUB AddSamplesIcons
-
- INIT:
-
- DstDir$ = DEST
- Title$ = BANNER
- SetAbout Title$, ABOUT
-
- CUIDLL$ = "logodlgs.dll" ''Custom user interface dll
- HELPPROC$ = "FHelpDlgProc" ''Help dialog procedure
-
- SetBitmap CUIDLL$, LOGO
- SetTitle Title$
- SrcDir$ = GetSymbolValue( "STF_SRCDIR" )
-
- Frame% = HwndFrame()
- I% = ShowWindow (Frame%, 3)
-
- szInf$ = GetSymbolValue("STF_SRCINFPATH")
- IF szInf$ = "" THEN
- szInf$ = GetSymbolValue("STF_CWDDIR") + "SETUP.INF"
- END IF
- ReadInfFile szInf$
-
- ' collect file sizes
- CursorSave% = ShowWaitCursor()
- PROGREQ& = GroupSize( "Programs" )
- HELPREQ& = GroupSize( "Help" )
- SAMPLEREQ& = GroupSize( "Samples" )
- RestoreCursor CursorSave%
- ClearCopyList
-
- ' 1. Issue the welcome message
-
- WELCOME:
- sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$)
- IF sz$ = "CONTINUE" THEN
- UIPop 1
- ELSE
- GOSUB ASKQUIT
- GOTO WELCOME
- END IF
-
- ' 1a. Issue the Windows 3.0 warning
-
- IF GetWindowsMajorVersion() = 3 AND GetWindowsMinorVersion() = 0 THEN
- sz$ = UIStartDlg(CUIDLL$, WIN30WARNING, "FInfoDlgProc", APPHELP, HELPPROC$)
- IF sz$ = "CONTINUE" THEN
- UIPop 1
- ELSE
- GOSUB ASKQUIT
- GOTO WELCOME
- END IF
- END IF
-
- ' 2. Enter the destination path
-
- GETPATH:
- SetSymbolValue "EditTextIn", DstDir$
- SetSymbolValue "EditFocus", "END"
- GETPATHL1:
- sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
- DstDir$ = GetSymbolValue("EditTextOut")
-
- IF sz$ = "CONTINUE" THEN
- IF IsDirWritable(DstDir$) = 0 THEN
- GOSUB BADPATH
- GOTO GETPATHL1
- END IF
- UIPop 1
- ELSEIF sz$ = "REACTIVATE" THEN
- GOTO GETPATHL1
- ELSEIF sz$ = "BACK" THEN
- UIPop 1
- GOTO WELCOME
- ELSE
- GOSUB ASKQUIT
- GOTO GETPATH
- END IF
-
- ' 2. Collect the parts of WinLogo to install
-
- OPTION:
- ' default: copy everything
- FOR i% = 1 TO 3 STEP 1
- AddListItem "CheckItemsState", "ON"
- NEXT
- ' Retrieve the space values for Windows and destination drive
- WINDISK$ = MID$( GetWindowsDir(), 1, 1 )
- DSTDISK$ = MID$( DstDir$, 1, 1 )
- WINFREE& = GetFreeSpaceForDrive( WINDISK$ )
- DSTFREE& = GetFreeSpaceForDrive( DSTDISK$ )
- WINREQ& = 0
- DSTREQ& = 0
-
- REQ& = PROGREQ&
- AddListItem "StatusItemsText", N2K( REQ& )
- AddListItem "StatusItemsText", N2K( HELPREQ& )
- AddListItem "StatusItemsText", N2K( SAMPLEREQ& )
- OPTL1:
- sz$ = UIStartDlg(CUIDLL$, CHECK, "FCustInstDlgProc", APPHELP, HELPPROC$)
-
- IF sz$ = "CONTINUE" THEN
- IF NOT CheckDisks() THEN
- UIPop 1
- GOTO GETPATH
- END IF
- PROGS$ = GetListItem( "CheckItemsState", 1 )
- HELP$ = GetListItem( "CheckItemsState", 2 )
- SAMPLES$ = GetListItem( "CheckItemsState", 3 )
- IF PROGS$ = "OFF" AND HELP$ = "OFF" AND SAMPLES$ = "OFF" THEN
- GOTO OPTL1
- END IF
- UIPop 1
- ELSEIF sz$ = "REACTIVATE" THEN
- GOTO OPTL1
- ELSEIF sz$ = "BACK" THEN
- UIPop 1
- GOTO GETPATH
- ELSEIF sz$ = "CHK1" THEN
- PROGS$ = GetListItem( "CheckItemsState", 1 )
- IF PROGS$ = "OFF" THEN
- ReplaceListItem "StatusItemsText", 1, "0 K"
- ELSE
- ReplaceListItem "StatusItemsText", 1, N2K( REQ& )
- END IF
- GOTO OPTL1
- ELSEIF sz$ = "CHK2" THEN
- HELP$ = GetListItem( "CheckItemsState", 2 )
- IF HELP$ = "OFF" THEN
- ReplaceListItem "StatusItemsText", 2, "0 K"
- ELSE
- ReplaceListItem "StatusItemsText", 2, N2K( HELPREQ& )
- END IF
- GOTO OPTL1
- ELSEIF sz$ = "CHK3" THEN
- SAMPLES$ = GetListItem( "CheckItemsState", 3 )
- IF SAMPLES$ = "OFF" THEN
- ReplaceListItem "StatusItemsText", 3, "0 K"
- ELSE
- ReplaceListItem "StatusItemsText", 3, N2K( SAMPLEREQ& )
- END IF
- GOTO OPTL1
- ELSE
- GOSUB ASKQUIT
- GOTO OPTION
- END IF
-
- Install
-
- QUIT:
- ON ERROR GOTO ERRQUIT
-
- IF ERR = 0 THEN
- dlg% = EXITSUCCESS
- ELSEIF ERR = STFQUIT THEN
- dlg% = EXITQUIT
- ELSE
- dlg% = EXITFAILURE
- END IF
- QUITL1:
- sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
- IF sz$ = "REACTIVATE" THEN
- GOTO QUITL1
- END IF
- UIPop 1
-
- END
-
- ERRQUIT:
- i% = DoMsgBox(FATAL, TITLE, MB_OK+MB_TASKMODAL+MB_ICONHAND)
- END
-
-
-
- BADPATH:
- sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
- IF sz$ = "REACTIVATE" THEN
- GOTO BADPATH
- END IF
- UIPop 1
- RETURN
-
- ASKQUIT:
- AskForQuit
- UIPop 1
- RETURN
-
- ' Perform the installation process!!
-
- SUB Install STATIC
-
- CreateDir DstDir$, cmoNone
- SampleDir$ = MakePath( DstDir$, SMPL )
- LogoExe$ = MakePath( DstDir$, "LOGO.EXE" )
- ClearCopyList
- IF PROGS$ = "ON" THEN
- AddSectionFilesToCopyList "Programs", SrcDir$, DstDir$
- END IF
- IF HELP$ = "ON" THEN
- AddSectionFilesToCopyList "Help", SrcDir$, DstDir$
- END IF
- IF SAMPLES$ = "ON" THEN
- AddSectionFilesToCopyList "Samples", SrcDir$, SampleDir$
- END IF
- CopyFilesInCopyList
-
- GrpFile$ = MakePath( GetWindowsDir(), "PCLOGO.GRP" )
- CreateProgmanGroup "PC Logo", GrpFile$, cmoNone
- ShowProgmanGroup "PC Logo", 1, cmoNone
- CreateProgmanItem "PC Logo", "PC Logo", LogoExe$, "", cmoOverwrite
- CreateProgmanItem "PC Logo", README, MakePath( DstDir$, "README.WRI"), "", cmoOverwrite
- IF HELP$ = "ON" THEN
- CreateProgmanItem "PC Logo", "PC Logo Help", "WINHELP.EXE " + MakePath( DstDir$, "LOGO.HLP" ), "", cmoOverwrite
- END IF
- IF SAMPLES$ = "ON" THEN
- AddSamplesIcons
- END IF
-
- ' Registration Database maintanance
- IF NOT WIN30 AND PROGS$ = "ON" THEN
- CreateRegKeyValue "PCLogo", "PC Logo for Windows"
- CreateRegKeyValue "PCLogo\shell\open\command", LogoExe$ + " %1"
- CreateRegKeyValue "PCLogo\shell\print\command", LogoExe$ + " /p %1"
- CreateRegKeyValue ".lgo", "PCLogo"
- END IF
-
- END SUB
-
- ' Combine path and file names
-
- FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
- IF szDir$ = "" THEN
- MakePath = szFile$
- ELSEIF szFile$ = "" THEN
- MakePath = szDir$
- ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
- MakePath = szDir$ + szFile$
- ELSE
- MakePath = szDir$ + "\" + szFile$
- END IF
- END FUNCTION
-
- ' Convert a number into a string in KB
-
- FUNCTION N2K( N& ) STATIC AS STRING
- N2K = STR$( ( N& + 1023 ) / 1024 ) + " K"
- END FUNCTION
-
- ' check the Windows and destination disks for enough free space.
- ' Return values:
- ' 0 - reenter path
- ' -1 - continue
-
- FUNCTION CheckDisks STATIC AS INTEGER
- CheckDisks = -1
- CHECK:
- WINREQ& = 0
- DSTREQ& = 0
- IF PROGS$ = "ON" THEN
- DSTREQ& = PROGREQ&
- END IF
- IF HELP$ = "ON" THEN
- DSTREQ& = DSTREQ& + HELPREQ&
- END IF
- IF SAMPLES$ = "ON" THEN
- DSTREQ& = DSTREQ& + SAMPLEREQ&
- END IF
- IF WINDISK$ = DSTDISK$ THEN
- DSTREQ& = DSTREQ& + WINREQ&
- END IF
- AddListItem "ConfirmTextIn","0"
- AddListItem "ConfirmTextIn","0"
- IF WINREQ& > WINFREE& THEN
- ReplaceListItem "ConfirmTextIn", 1, N2K( WINREQ& - WINFREE& )
- ReplaceListItem "ConfirmTextIn", 2, WINDISK$
- sz$ = UIStartDlg(CUIDLL$, TOOBIGWIN, "FConfirmDlgProc", APPHELP, HELPPROC$)
- IF sz$ = "CONTINUE" THEN
- GOTO CHECK
- ELSE
- AskForQuit
- GOTO CHECK
- END IF
- UIPop 1
- END IF
- IF DSTREQ& > DSTFREE& THEN
- ReplaceListItem "ConfirmTextIn", 1, N2K( DSTREQ& - DSTFREE& )
- ReplaceListItem "ConfirmTextIn", 2, DSTDISK$
- sz$ = UIStartDlg(CUIDLL$, TOOBIGDST, "FConfirmDlgProc", APPHELP, HELPPROC$)
- IF sz$ = "EXIT" THEN
- AskForQuit
- END IF
- CheckDisks = 0
- UIPop 2 ' also remove the checkbox dialog
- END IF
- END FUNCTION
-
- ' Ask whether to quit
- ' Quits or returns
-
- SUB AskForQuit STATIC
- ASK:
- sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
-
- IF sz$ = "EXIT" THEN
- UIPopAll
- ERROR STFQUIT
- ELSEIF sz$ = "REACTIVATE" THEN
- GOTO ASK
- END IF
- END SUB
-
- ' Find the required disk space for a specific group
-
- FUNCTION GroupSize( GROUP$ ) STATIC AS LONG
- ' HARD CODED!!!
- DIM N AS LONG
- IF GROUP$ = "Programs" THEN
- N = SIZE_PROGRAMS * 1024
- END IF
- IF GROUP$ = "Help" THEN
- N = SIZE_HELP * 1024
- END IF
- IF GROUP$ = "Samples" THEN
- N = SIZE_SAMPLES * 1024
- END IF
- GroupSize = N
- END FUNCTION
-
- ' Add the samples in the samples list to the PROGMAN group
-
- SUB AddSamplesIcons STATIC
- Icon$ = SampleDir$ + "\LOGOPGM.ICO"
- OPEN SrcDir$ + "SETUP\SAMPLES.LST" FOR INPUT AS #1
- WHILE NOT EOF( 1 )
- LINE INPUT #1, Fname$
- LINE INPUT #1, Fdesc$
- CreateProgmanItem "PC Logo", Fdesc$, SampleDir$ + "\" + Fname$, Icon$, cmoOverwrite
- WEND
- CLOSE #1
- END SUB
-